In [1]:
#Importing the wetterDienst library and the plotly library for graphing
import wetterdienst
from wetterdienst.provider.dwd.observation import DwdObservationRequest, \
    DwdObservationPeriod, DwdObservationResolution, DwdObservationDataset,DwdObservationParameter
import plotly.express as px
from plotly.graph_objs import *
1_minute
In [2]:
#Setting up the resolution for data filtering
print('Please use the options as they are given')

print('Enter Resolution:')
print('Options:',DwdObservationResolution._member_names_)
Resolution=input()
Please use the options as they are given
Enter Resolution:
Options: ['MINUTE_1', 'MINUTE_10', 'HOURLY', 'SUBDAILY', 'DAILY', 'MONTHLY', 'ANNUAL']
DAILY
In [3]:
#Selecting the dataset
datasets=[]
for i in range(0,len(dir(getattr(DwdObservationParameter,Resolution)))):
    datasets.append(dir(getattr(DwdObservationParameter,Resolution))[i])
    if dir(getattr(DwdObservationParameter,Resolution))[i+1]=='__class__':
        break

print('Enter Dataset:')
print('Options:',datasets)
Dataset=input()
Enter Dataset:
Options: ['CLIMATE_SUMMARY', 'CLOUD_COVER_TOTAL', 'COUNT_WEATHER_TYPE_DEW', 'COUNT_WEATHER_TYPE_FOG', 'COUNT_WEATHER_TYPE_GLAZE', 'COUNT_WEATHER_TYPE_HAIL', 'COUNT_WEATHER_TYPE_RIPE', 'COUNT_WEATHER_TYPE_SLEET', 'COUNT_WEATHER_TYPE_STORM_STORMIER_WIND', 'COUNT_WEATHER_TYPE_STORM_STRONG_WIND', 'COUNT_WEATHER_TYPE_THUNDER', 'HUMIDITY', 'KL', 'MORE_PRECIP', 'MORE_WEATHER_PHENOMENA', 'PRECIPITATION_FORM', 'PRECIPITATION_HEIGHT', 'PRECIPITATION_MORE', 'PRESSURE_AIR_SITE', 'PRESSURE_VAPOR', 'RADIATION_SKY_LONG_WAVE', 'RADIATION_SKY_SHORT_WAVE_DIFFUSE', 'RADIATION_SKY_SHORT_WAVE_DIRECT', 'SNOW_DEPTH', 'SNOW_DEPTH_EXCELLED', 'SNOW_DEPTH_NEW', 'SOIL_TEMPERATURE', 'SOLAR', 'SUNSHINE_DURATION', 'TEMPERATURE_AIR_MAX_200', 'TEMPERATURE_AIR_MEAN_200', 'TEMPERATURE_AIR_MIN_005', 'TEMPERATURE_AIR_MIN_200', 'TEMPERATURE_SOIL', 'TEMPERATURE_SOIL_MEAN_002', 'TEMPERATURE_SOIL_MEAN_005', 'TEMPERATURE_SOIL_MEAN_010', 'TEMPERATURE_SOIL_MEAN_020', 'TEMPERATURE_SOIL_MEAN_050', 'TEMPERATURE_SOIL_MEAN_100', 'WATER_EQUIV', 'WATER_EQUIVALENT', 'WATER_EQUIVALENT_SNOW_DEPTH', 'WATER_EQUIVALENT_SNOW_DEPTH_EXCELLED', 'WEATHER_PHENOMENA', 'WEATHER_PHENOMENA_MORE', 'WIND_GUST_MAX', 'WIND_SPEED']
CLIMATE_SUMMARY
In [4]:
# Parameter variable selection

setting=getattr(DwdObservationParameter,Resolution)


Parameters=[]
for i in range(0,len(dir(getattr(setting,Dataset)))):
    if dir(getattr(setting,Dataset))[i]=='__class__':
        break
    Parameters.append(dir(getattr(setting,Dataset))[i])
    
if Parameters==[]:
    Parameter=Dataset
else:
    print('Enter Parameter:')
    print('Options:',Parameters)
    Parameter=input()
Enter Parameter:
Options: ['CLOUD_COVER_TOTAL', 'HUMIDITY', 'PRECIPITATION_FORM', 'PRECIPITATION_HEIGHT', 'PRESSURE_AIR_SITE', 'PRESSURE_VAPOR', 'QUALITY_GENERAL', 'QUALITY_WIND', 'SNOW_DEPTH', 'SUNSHINE_DURATION', 'TEMPERATURE_AIR_MAX_200', 'TEMPERATURE_AIR_MEAN_200', 'TEMPERATURE_AIR_MIN_005', 'TEMPERATURE_AIR_MIN_200', 'WIND_GUST_MAX', 'WIND_SPEED']
TEMPERATURE_AIR_MAX_200
In [5]:
#Setting up the Period

print('Enter Period:')
print('Options:',DwdObservationPeriod._member_names_)
Period=input()
Enter Period:
Options: ['HISTORICAL', 'RECENT', 'NOW']
RECENT
In [6]:
# Acquiring all the stations that provide data according to selected filters
stations = DwdObservationRequest(
      parameter=Parameter,
      resolution=Resolution,
      period=Period
       )

print(stations.all().df)
print('\n')
Dircache located at C:\Users\Drass\AppData\Local\wetterdienst\wetterdienst\Cache
    station_id                 from_date                   to_date  height  \
0        00011 1980-09-01 00:00:00+00:00 2020-09-30 00:00:00+00:00   680.0   
1        00044 1969-01-01 00:00:00+00:00 2022-05-21 00:00:00+00:00    44.0   
2        00071 1986-11-01 00:00:00+00:00 2019-12-31 00:00:00+00:00   759.0   
3        00073 1959-03-01 00:00:00+00:00 2022-05-20 00:00:00+00:00   340.0   
4        00078 1961-01-01 00:00:00+00:00 2022-05-21 00:00:00+00:00    65.0   
..         ...                       ...                       ...     ...   
580      15911 2021-06-01 00:00:00+00:00 2022-05-21 00:00:00+00:00   278.0   
581      15976 2020-04-02 00:00:00+00:00 2022-05-21 00:00:00+00:00   216.0   
582      15978 2020-04-02 00:00:00+00:00 2022-05-21 00:00:00+00:00   316.0   
583      19171 2020-09-01 00:00:00+00:00 2022-05-21 00:00:00+00:00    13.0   
584      19172 2020-09-01 00:00:00+00:00 2022-05-21 00:00:00+00:00    48.0   

     latitude  longitude                         name               state  
0     47.9737     8.5205  Donaueschingen (Landeplatz)   Baden-Württemberg  
1     52.9336     8.2370                 Großenkneten       Niedersachsen  
2     48.2156     8.9784              Albstadt-Badkap   Baden-Württemberg  
3     48.6159    13.0506         Aldersbach-Kriestorf              Bayern  
4     52.4853     7.9126                    Alfhausen       Niedersachsen  
..        ...        ...                          ...                 ...  
580   51.1348    14.4343        Großpostwitz-Denkwitz             Sachsen  
581   49.9529     8.2107              Ober-Olm/Bellem     Rheinland-Pfalz  
582   49.5044     7.8618                      Sembach     Rheinland-Pfalz  
583   54.0038     9.8553           Hasenkrug-Hardebek  Schleswig-Holstein  
584   54.0246     9.3880                       Wacken  Schleswig-Holstein  

[585 rows x 8 columns]


In [7]:
#Filter for a spefic station and graphing data

print('Choose Station from the above table:')
station_id=input('Enter Statins ID:')

data= stations.filter_by_station_id(station_id=station_id)

station_data = data.values.all().df
#print(station_data)
    

tidy = station_data.groupby(['date','value']).sum().reset_index(level=[0,1])
print(tidy)
fig = px.bar(tidy,x='date',y='value',
 labels={
                     "date": "Year ",
                     "value":'TEMPERATURE_AIR',

                     
                 },
                title="TEMPERATURE_AIR_MAX_200 over the years",barmode='group',color='quality')
fig.show()
Choose Station from the above table:
Enter Statins ID:73
parameters {'true_local_time', 'end_of_interval'} are skipped in tidy format as the date parameters are currently not converted to floats
                         date   value  quality
0   2020-11-18 00:00:00+00:00  284.95      3.0
1   2020-11-19 00:00:00+00:00  280.65      3.0
2   2020-11-20 00:00:00+00:00  280.55      3.0
3   2020-11-21 00:00:00+00:00  278.25      3.0
4   2020-11-22 00:00:00+00:00  279.45      3.0
..                        ...     ...      ...
542 2022-05-14 00:00:00+00:00  296.95      1.0
543 2022-05-15 00:00:00+00:00  299.35      1.0
544 2022-05-16 00:00:00+00:00  298.65      1.0
545 2022-05-17 00:00:00+00:00  296.85      1.0
546 2022-05-18 00:00:00+00:00  296.45      1.0

[547 rows x 3 columns]